package com.xlf.service.base.service;

import com.xlf.common.core.util.page.TableDataInfo;
import com.xlf.common.core.util.page.redis.PageResult;
import com.xlf.pojo.base.*;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xlf.pojo.dto.ContestListReqDTO;
import com.xlf.service.base.pojo.dto.RegisterContestDTO;
import com.xlf.service.base.pojo.vo.*;

import java.util.List;

/**
 * @author 小新
 * @description 针对表【contest】的数据库操作Service
 * @createDate 2023-12-15 11:24:01
 */
public interface ContestService extends IService<Contest> {


    List<Contest> getList(Contest contest);

    boolean saveOrUpdate_(Contest contest);

    Contest getConTest(Long id);

    void delete(List<Long> ids);

    boolean updateStatus(Contest contest);

    /**
     * 前台获取比赛列表
     * @param contestListVO
     * @return
     */
    TableDataInfo<ContestListVO> getContestListVO(ContestListReqDTO contestListVO);

    /**
     * 获取比赛的题目详情
     * @param problemId
     * @return
     */
    ProblemDetailVO getContestProblemDetailVO(Long problemId);

    /**
     * 获取比赛详情
     * @param id
     * @return
     */
    ContestVO getContestVO(Long id);

    List<ContestProblem> getProblemList(Long cid);

    /**
     * 比赛时获取比赛的题目列表
     * @param cid
     * @return
     */
    List<ContestProblemVO> getContestProblemVO(Long cid);

    /**
     * 获取比赛排行榜题目参照
     * @param id
     * @return
     */
    List<ContestProblemReVO> getContestProblemReVO(Long id);


    List<ContestRegister> getRegisterUserList(Long cid);

    void addContestProblem(List<ContestProblem> contestProblems);

    void updateContestProblem(ContestProblem contestProblems);

    void register(RegisterContestDTO registerContestDTO);

    void addRegisterUser(List<ContestRegister> contestRegisters);

    /**
     * 从缓存获取比赛实时排行榜
     * @param cid
     * @return
     */
    TableDataInfo getContestByRedisRank(Long cid);

    /**
     * 从数据库获取比赛排行榜
     * @param cid
     * @return
     */
    TableDataInfo getContestByMysqlRank(Long cid);


    /**
     * 获取最近的比赛信息
     * @return
     */
    TableDataInfo<RecentlyContestVO> getRecentlyContest();

    /**
     * 比赛页面获取比赛消息
     * @param cid
     * @return
     */
    ContestInfoVO getContestInfo(Long cid);
}
